<?php

namespace App\Http\Controllers;

use App\Handlers\ImageUploadHandler;
use App\Models\Category;
use App\Models\Link;
use App\Models\Topic;
use App\Http\Requests\StoreTopicRequest;
use App\Http\Requests\UpdateTopicRequest;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class TopicController extends Controller {
    public function __construct() {
        $this->middleware('auth')->except(['show','index']);
    }
    public function index(Request $request,User $user,Link $link) {
        $topics = Topic::with('user','category')->withOrder($request->order)->paginate(16);
        $active_users = $user->getActiveUsers();
        $links = $link->getAllCached();
        return view('topics.index',compact('topics','active_users','links'));
    }
    public function create() {
        $categories = Category::all();
        return view('topics.create',compact('categories'));
    }


    public function store(StoreTopicRequest $request,Topic $topic) {
        $topic->fill($request->all());
        $topic->user_id = Auth::id();
        $topic->save();
        return redirect()->to($topic->link())->with('success','帖子发布成功');
    }

    public function show(Request $request,Topic $topic) {
        if(!empty($topic->slug) && ($request->slug != $topic->slug)){
            return redirect($topic->link(),301);
        }
        return view('topics.show',compact('topic'));

    }


    public function edit(Topic $topic) {
        $this->authorize('update',$topic);
        $categories = Category::all();
        return view('topics.edit',compact('topic','categories'));
    }

    public function update(UpdateTopicRequest $request, Topic $topic) {
        $this->authorize('update',$topic);
        $topic->update($request->all());
        return redirect()->to($topic->link())->with('success','帖子修改成功');
    }

    public function destroy(Topic $topic) {
        $this->authorize('destroy',$topic);
        $topic->delete();
        return redirect()->route('topics.index')->with('success','帖子删除成功');
    }

    public function uploadImage(Request $request,ImageUploadHandler $uploader){
        $data = [
            'success'=>false,
            'msg'=>'图片上传失败',
            'file_path'=>''
        ];
        if($file = $request->upload_file){
            $result = $uploader->save($file,'topics',Auth::id(),720);
            if($result){
                $data['success'] = true;
                $data['msg'] = '图片上传成功';
                $data['file_path'] = $result['path'];
            }
        }
        return $data;
    }
}
